// pages/home/home.js
import {config} from "../../config/config";
import {Theme} from "../../models/theme";
import {Banner} from "../../models/banner";
import {Category} from "../../models/category";
import {Activity} from "../../models/activity";
import {SpuPaging} from "../../models/spu-paging";

Page({

    /**
     * 页面的初始数据
     */
    data: {
        themeA: null,
        bannerB: null,
        bannerG: null,
        grid: [],
        activityD: null,
        themeE: null,
        themeESpu: [],
        themeF: null,
        themeH: null,
        spuPaging: null,
        // 页面默认加载状态
        loadingType: 'loading'
    },

    /**
     * 生命周期函数--监听页面加载
     * JS 文件主要做来干嘛的?
     *    1、js 一般用来写业务逻辑的
     * 探讨本质
     *    1、考虑到代码分层机构 不然难以维护
     *    2、页面 js 不应该写业务逻辑
     *    3、view视图层 业务逻辑层 桥梁 中间层
     *    4、MVC Model View Controller Model 写业务
     *    5、前端至少需要分一层用来写业务 虽然前端不像后端分层那么的严谨
     */
    async onLoad(options) {
        this.initAllData()
    },
    /**
     * 初始化数据
     * js中提供了很多操作集合的方法
     * find、filter、map、some、reduce
     * 类似 Java8
     *
     * 初始化调用一次接口
     * 在页面中任何位置都能拿到数据 需要将数据保存 保存数据状态
     * 保存数据 类的对象 本身就具有保存数据的功能
     * 类能保存数据 类不能保存状态
     * 类的对象可以保存数据不可以保存状态
     *    1、保存到 data 中
     *    2、保存到缓存中
     *    3、保存到全局 app 中 大材小用
     * 保证调用方 调用过程 简单的
     * @returns {Promise<void>}
     */
    async initAllData() {
        // 初始化
        // const themeA = await Theme.getHomeLocationA()
        const theme = new Theme
        await theme.getThemes()
        // 简洁
        const themeA = await theme.getHomeLocationA()
        const themeE = await theme.getHomeLocationE()
        const themeF = await theme.getHomeLocationF()
        const themeH = await theme.getHomeLocationH()
        let themeESpu = []
        if (themeE.online) {
            const data = await Theme.getHomeLocationESpu()
            if (data) {
                themeESpu = data.spu_list.slice(0, 8)
            }
        }
        const bannerB = await Banner.getHomeLocationB()
        const bannerG = await Banner.getHomeLocationG()
        const grid = await Category.getHomeLocationC()
        const activityD = await Activity.getHomeLocationD()
        this.initBottomSpuList()
        this.setData({
            themeA,
            bannerB,
            bannerG,
            grid,
            activityD,
            themeE,
            themeF,
            themeH,
            themeESpu,
        })
    },
    async initBottomSpuList() {
        const spuPaging = SpuPaging.getLatestPaging()
        const data = await spuPaging.getMoreData()
        this.setData({
            spuPaging: spuPaging
        })
        if (!data) {
            return
        }
        // 瀑布流传递数据 默认累加数据
        wx.lin.renderWaterFlow(data.items)
    },
    /**
     * 生命周期函数--监听页面初次渲染完成
     */
    onReady: function () {

    },

    /**
     * 生命周期函数--监听页面显示
     */
    onShow: function () {

    },

    /**
     * 生命周期函数--监听页面隐藏
     */
    onHide: function () {

    },

    /**
     * 生命周期函数--监听页面卸载
     */
    onUnload: function () {

    },

    /**
     * 页面相关事件处理函数--监听用户下拉动作
     */
    onPullDownRefresh: function () {

    },

    /**
     * 页面上拉触底事件的处理函数
     */
    onReachBottom: async function () {
        // 滑动后继续请求分页数据
        const data = await this.data.spuPaging.getMoreData()
        if (!data) {
            return
        }
        wx.lin.renderWaterFlow(data.items)
        if (!data.moreData) {
            this.setData({
                loadingType: 'end'
            })
        }
    },

    /**
     * 用户点击右上角分享
     */
    onShareAppMessage: function () {

    }
})